package com.gnerv.battle.boot.module.base.repository.mapper;

import com.gnerv.battle.boot.common.base.annotation.tenant.TenantExclude;
import com.gnerv.battle.boot.module.base.model.dto.AccountDTO;
import com.gnerv.battle.boot.module.base.model.dto.AccountDetailsDTO;
import com.gnerv.battle.boot.module.base.model.entity.Account;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author ligen
 */
@Mapper
public interface AccountMapper {

    /**
     * @param account
     * @return
     */
    long insert(@Param(value = "account") Account account);

    /**
     * @param ukId
     * @return
     */
    long deleteByUkId(@Param(value = "ukId") String ukId);

    long deleteBatchByUkIds(@Param(value = "ukIds") List<String> ukIds);

    /**
     * @param account
     * @return
     */
    long updateByUkId(@Param(value = "account") Account account);

    /**
     * @param ukId
     * @return
     */
    AccountDTO selectByUkId(@Param(value = "ukId") String ukId);

    AccountDTO selectByUsername(@Param(value = "username") String username);

    @TenantExclude
    AccountDetailsDTO selectLoginByUsername(@Param(value = "username") String username);

    /**
     * @param username
     * @param limitStart
     * @param limitSize
     * @return
     */
    List<AccountDTO> listByUsername(@Param(value = "username") String username,
                                    @Param(value = "limitStart") Integer limitStart,
                                    @Param(value = "limitSize") Integer limitSize);

    /**
     * @param roleUkId
     * @return
     */
    List<AccountDTO> listByRoleUkId(@Param(value = "roleUkId") String roleUkId);

    List<AccountDTO> listByOrgUkId(@Param(value = "orgUkId") String orgUkId);

    int countByUsername(@Param(value = "username") String username);

    long isExist(@Param(value = "username") String username);

    Set<String> listUkIdByRoleUkIdAndOrgUkId(@Param(value = "roleUkIdList") Set<String> roleUkIdList,
                                              @Param(value = "orgUkIdList") Set<String> orgUkIdList);

    Set<String> listUsernameByRoleUkIdAndOrgUkId(@Param(value = "roleUkIdList") List<String> roleUkIdList,
                                                  @Param(value = "orgUkIdList") List<String> orgUkIdList);

}




